using System;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using LibreriaCommon;
using LibreriaDS;

namespace LibreriaData
{
    /// <summary>
    /// Clase de acceso a datos de Usuarios.
    /// </summary>
    public abstract class daUsuarioBase : daBase, IDisposable
	{
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="securityInfo">Referencia a un objeto SecurityInfo.</param>
        public daUsuarioBase(SecurityInfo securityInfo)
            : base(securityInfo)
		{
		}

		#region Dispose
		private bool disposed = false;

		public void Dispose()
		{
			Dispose(true);
			GC.SuppressFinalize(this);
		}

		protected void Dispose(bool disposing)
		{
			if (!this.disposed)
			{
				if (disposing)
				{
					//Liberar recursos manejados
				}

				//liberar recursos no manejados
			}

			disposed = true;         
		}

		~daUsuarioBase()
		{
			Dispose(false);
		}
		#endregion Dispose

		/// <summary>
		/// Buscar Usuario por clave primaria.
		/// </summary>
		/// <param name="id">Id. del Usuario.</param>
		/// <returns>dsUsuario</returns>
        public virtual dsUsuario FindByPrimaryKey(int id) 
		{ 
			try 
			{ 
				dsUsuario ds = new dsUsuario(); 
				daCommon.GenericFind(securityInfo, "UsuarioFindByPrimaryKey", ds, new string[] {"Usuario"}, id); 
				return ds; 
			} 
			catch (Exception ex) 
			{ 
				throw new daException(ex);
			} 
		}

        /// <summary>
        /// Buscar Usuarios por estado.
        /// </summary>
        /// <param name="estado">Estado (null para todos)</param>
        /// <returns>dsUsuario</returns>
        public virtual dsUsuario FindByEstado(object estado) 
		{ 
			try 
			{ 
				dsUsuario ds = new dsUsuario(); 
				daCommon.GenericFind(securityInfo, "UsuarioFindByEstado", ds, new string[] {"Usuario"}, estado); 
				return ds; 
			} 
			catch (Exception ex) 
			{ 
				throw new daException(ex);
			} 
		}

        /// <summary>
        /// Actualizar Usuarios.
        /// </summary>
        /// <param name="ds">dsUsuario</param>
        public virtual void Update(dsUsuario ds) 
		{ 
			Database conn = null; 
			DbCommand insertCommand = null; 
			DbCommand updateCommand = null; 

			try 
			{
                string[] parameters = new string[] { "UsuarioID", "UsuarioNombre", "UsuarioApellido", "UsuarioEmail", "UsuarioNick", "UsuarioPassword", "Activo", "FechaAlta", "UsuarioAlta", "FechaModificacion", "UsuarioModificacion" };

				conn = daConnection.GetOpenedConnection();
				insertCommand = conn.GetStoredProcCommandWithSourceColumns("UsuarioInsert", parameters); 
				updateCommand = conn.GetStoredProcCommandWithSourceColumns("UsuarioUpdate", parameters); 
				daCommon.UpdateDataset(securityInfo, insertCommand, null, updateCommand, ds, "Usuario"); 
				ds.AcceptChanges(); 
			} 
			catch (Exception ex) 
			{ 
				throw new daException(ex);
			} 
			finally 
			{ 
				if (insertCommand != null)
				{
					insertCommand.Dispose();
				}
				
				if (updateCommand != null) 
				{ 
					updateCommand.Dispose(); 
				} 
			} 
		} 
 	}
}
